/*
 * @Author: spring
 * @version:
 * @Date: 2022-09-06 23:11:37
 * @LastEditors: spring
 * @LastEditTime: 2022-09-09 09:13:20
 * @Descripttion: tcp 通信函数封装
 * 创建连接 数据解析 数据封装
 */
#ifndef _COM_TCP_H_
#define _COM_TCP_H_
#include "Com_format.h"
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>
#include "cam.h"

// 监听排队最大个数
#define LISTEN_LEN 10

/**
 * @msg: 获取一个socket 监听套接字，
 * @param {char} *ip ：监听的IP地址
 * @param {int} port：监听的端口
 * @return {*} ：正确 返回一个监听套接字，错误返回-1
 */
int getListenfd(const char *ip, const int port);

/**
 * @msg: 小车行动封装 封装 命令数据到帧中。 帧由该函数开辟new 空间，出来需要外部释放。
 * @param {activate_car} data:数据结构体
 * @param {char} * & 封装之后的命令。
 * @return {*} 成功返回true 失败返回false
 */
bool packCmdData_activate_car(const struct activate_car data, char **COM);

/**
 * @msg:小车环境信息封装
 * @param {activate_car} data
 * @param {char} *
 * @return {*}
 */
bool packCmdData_car_info(const struct car_info data, char **COM);

/**
 * @msg:喇叭命令封装
 * @param {trumpet} data
 * @param {char} *
 * @return {*}
 */
bool packCmdData_trumpet(const struct trumpet data, char **COM);

/**
 * @msg:摄像头数据封装
 * @param {trumpet} data
 * @param {char} *
 * @return {*}
 */
bool packCmdData_cam_t(const struct cam_t data, char **COM);

/**
 * @msg: 解析命令头
 * @param {activate_car} &data 保存解析后的数据
 * @param {char} *COM 传指令
 * @return {*}成功返回 true，失败返回false
 */
bool unPackCmdHead(struct head *data, const char *COM);

/**
 * @msg: 解析，帧中数据放到data中。
 * @param {activate_car} &data
 * @param {char} *COM
 * @return {*}成功返回 true，失败返回false
 */
bool unPackCmdData_activate_car(struct activate_car *data, const char *COM);

/**
 * @msg:
 * @param {car_behavior} &data
 * @param {char} *COM
 * @return {*}
 */
bool unPackCmdData_car_info(struct car_info *data, const char *COM);

/**
 * @msg:
 * @param {trumpet} &data
 * @param {char} *COM
 * @return {*}
 */
bool unPackCmdData_trumpet(struct trumpet *data, const char *COM);

/**
 * @msg:摄像头数据解析
 * @param {trumpet} data
 * @param {char} *
 * @return {*}
 */
bool unpackCmdData_cam_t(struct cam_t *data, const char *COM);

#endif
//_COM_TCP_H_